// 简易小爬虫
/* 环境
    superagent：
        npm install superagent -D
    cheerio:
        npm install cheerio -D
*/
const hash = require('object-hash');
// // 导入 superagent
const superagent = require('superagent');
// // // 导入 cheerio
const cheerio = require('cheerio');
// // // 导入 fs
const fs = require('fs');
const axios = require('axios');

const plurl = 'https://search.jd.com/Search?keyword=%E8%BF%9B%E5%8F%A3%E9%9B%B6%E9%A3%9F&enc=utf-8&wq=%E8%BF%9B%E5%8F%A3%E9%9B%B6%E9%A3%9F&pvid=ryxp9pui.nhltvu';





var data = [{
        title: "食品饮料",
        li: ["休闲食品", "牛奶", "饮料"],
        sublist: [
            ["饼干蛋糕", "橄榄油", "坚果蜜饯", "糖果/巧克力", "进口牛奶", "方便食品", "饮料冲调"],
            ["猪肉脯", "薯片/膨化", "鸭脖", "海苔", "牛肉干", "果蔬干", "果冻", "辣条"],
            ["曲奇", "面包", "蛋糕", "饼干", "派", "蛋卷", "威化", "肉松饼"],
            ["核桃", "夏威夷果", "松子", "开心果", "碧根果", "腰果", "巴旦木", "花生"],
            ["枣", "葡萄干", "芒果干", "梅", "山楂", "枸杞", "蔓越莓干", "栗子", "薯/芋头类"],
            ["巧克力", "口香糖", "棒棒糖", "喜糖", "糖", "润喉糖", "黑巧克力"],
            ["牛奶乳品", "酸奶", "风味奶", "儿童奶", "鲜奶", "成人奶粉", "乳酸饮料"],
            ["乌龙茶", "龙井", "普洱", "红茶", "绿茶", "白茶", "黑茶", "养生茶", "花果茶", "花草茶"],
            ["碳酸水", "中草药饮料", "功能类", "运动类", "茶饮", "蛋白质类", "果蔬类", "果味类"],
            ["咖啡", "奶茶", "蜂蜜", "蜂产品", "柚子茶", "营养奶粉", "谷粉豆浆"]
        ],

        subtitle: ["进口食品", "休闲食品", "蛋糕饼干", "坚果炒货", "蜜饯果干", "糖果/巧克力", "牛奶", "茗茶", "饮料/水", "营养冲调"]
    },
    {
        title: "粮油副食",
        li: ["食用油", "米面", "厨房调味"],
        sublist: [
            ["调和油", "玉米油", "葵花籽油", "大豆油", "菜籽油", "茶油", "亚麻籽油", "橄榄油", "椰子油"],
            ["南方籼米", "五常大米", "进口大米", "稻花香", "大米", "面粉", "挂面"],
            ["红小豆", "黄豆", "薏仁米", "绿豆", "黑米", "糯米", "黑芝麻", "杂粮礼盒"],
            ["醋", "盐", "白糖", "红糖", "烘焙原料", "味精/鸡精", "复合调味料", "香油/芝麻油", "咖喱"],
            ["方便米饭", "火腿肠", "罐头", "八宝粥", "速食汤粥", "麦片谷物", "方便粉丝", "进口方便面"],
            ["银耳", "食用菌", "枸杞", "大枣", "桂圆干", "海干货", "莲子", "水果干"],
            ["香辣酱", "辣椒酱", "豆瓣酱", "番茄酱", "花生酱", "香菇酱", "拌饭酱", "沙拉酱"],
            ["北京特产", "上海特产", "海南特产", "福建特产", "山西特产", "西藏特产", "四川特产", "安徽特产"]
        ],
        subtitle: ["食用油", "米面/面粉", "健康杂粮", "厨房调味", "方便速食", "南北干货", "调味酱", "地方特产"]
    },
    {
        title: "个人护理",
        li: ["洗发护发", "身体", "口腔", "女性"],
        sublist: [
            ["护发素", "护发精油", "发膜", "套装"],
            ["剃须", "润肤", "颈部", "手足", "护手霜", "手膜", "护足霜", "足膜"],
            ["牙膏", "牙粉", "牙刷", "牙线", "牙缝刷", "口喷", "假牙清洁", "套装"],
            ["假发", "发胶", "发蜡", "弹力素", "发泥", "啫喱", "蓬蓬粉", "发油", "定型喷雾"],
            ["卫生护垫", "卫生棉条", "私密护理", "套装"]
        ],
        subtitle: ["洗发护理", "身体护理", "口腔护理", "美发假发/造型", "卫生护理"]
    },
    {
        title: "护肤美妆",
        li: ["面部护肤", "香水彩妆", "男士"],
        sublist: [
            ["卸妆", "洁面", "爽肤水", "乳液面霜", "精华", "眼霜", "防晒", "套装"],
            ["男士香水", "Q版香水", "香水套装"],
            ["眉笔", "睫毛膏", "眼线", "眼影", "唇膏/彩", "腮红", "美甲", "美妆工具"],
            ["洗发护理", "身体护理", "剃须", "男士套装"],
            ["润肤", "手足"],
            ["美体工具", "美甲工具"]
        ],
        subtitle: ["面部护肤", "香水", "彩妆", "男士专区", "身体护肤", "美容工具"]
    },
    {
        title: "家居清洁",
        li: ["纸品湿巾", "衣物清洁", "厨房用品"],
        sublist: [
            ["卷纸", "湿巾", "手帕纸", "厨房用纸", "商务用纸"],
            ["机洗洗衣液", "衣物护理剂", "除菌消毒", "洗衣粉", "洗衣皂"],
            ["洗洁精", "卫浴清洁", "地板清洁", "墙面玻璃清洁", "家电清洁"],
            ["垃圾袋", "口罩", "餐具用品", "厨房用品", "浴室/卧室用品"]
        ],
        subtitle: ["纸品湿巾", "衣物清洁", "家庭清洁", "一次性用品"]
    },
    {
        title: "母婴用品",
        li: ["奶粉", "尿裤", "玩具"],
        sublist: [
            ["成人奶粉"],
            ["钙铁锌/维生素", "米粉/菜粉", "益生菌/初乳", "清火/开胃", "果泥/果汁", "面条/粥", "宝宝零食"],
            ["拉拉裤", "成人尿裤", "湿巾"],
            ["宝宝洗浴", "理发器", "洗衣液/皂", "奶瓶清洗", "儿童餐具", "水壶/水杯"],
            ["吸奶器", "牙胶安抚", "暖奶消毒", "辅食料理机"],
            ["婴儿内衣", "婴儿礼服", "婴儿鞋帽袜", "家居床品", "安全防护"],
            ["防辐射服", "妈咪包/背婴带", "产后塑身", "孕妇护肤", "文胸/内裤", "月子装", "三轮车", "自行车"],
            ["婴儿推车", "餐椅摇椅", "学步车", "扭扭车", "滑板车", "电动车"],
            ["安全座椅", "增高垫"]
        ],
        subtitle: ["奶粉", "营养辅食", "尿裤湿巾", "洗护用品", "喂养用品", "寝居服饰", "妈妈专区", "童车童床", "安全座椅"]
    },
    {
        title: "中外名酒",
        li: ["白酒", "红酒/起泡", "啤酒"],
        sublist: [
            ["酱香型", "浓香型", "凤香型", "兼香型", "董香型", "黄酒/养生酒", "陈年老酒"],
            ["白啤", "黄啤", "国产啤酒", "进口啤酒", "烈性啤酒", "精酿啤酒", "果味/无醇", "其他"],
            ["精美礼盒", "红葡萄酒", "白葡萄酒", "桃红葡萄酒", "贵腐/加强酒", "起泡酒", "海外直采"],
            ["威士忌", "单一麦芽", "金酒", "朗姆酒", "龙舌兰", "伏特加", "鸡尾酒", "清酒", "烧酒", "梅子酒", "力娇酒"],
            ["啤酒", "洋酒", "世界名庄"]
        ],
        subtitle: ["白酒", "啤酒", "葡萄酒", "洋酒", "海外直采"]
    },
    {
        title: "京东生鲜",
        li: ["橙子", "奇异果", "北极虾", "牛排", "鸡蛋"],
        sublist: [
            ["车厘子", "芒果", "奇异果", "橙子", "榴莲", "牛油果", "蓝莓", "火龙果", "山竹"],
            ["虾类", "海产干货", "贝类", "海参", "三文鱼", "龙虾", "帝王蟹", "扇贝", "鳕鱼", "大闸蟹"],
            ["羊肉", "猪肉", "牛排", "牛腩", "牛腱子", "羊肉卷", "羊排", "猪蹄"],
            ["鸭", "鸡蛋", "鸭蛋", "鸽", "鸡腿", "鸡翅", "特色禽类"],
            ["瓜果茄类", "根茎类", "鲜菌菇", "葱姜蒜类", "南瓜", "西红柿", "玉米", "泡菜", "山药"],
            ["面点", "包子", "汤圆", "馄饨", "火锅丸子", "速冻半成品", "黄油奶酪", "手抓饼"],
            ["低温奶", "甜品蛋糕", "冷藏果蔬汁"]
        ],
        subtitle: ["新鲜水果", "海鲜水产", "猪牛羊肉", "禽类蛋品", "新鲜蔬菜", "冷冻速食", "饮品甜品"]
    },
    {
        title: "居家生活",
        li: ["置物架", "五金", "绿植", "狗粮"],
        sublist: [
            ["洗衣机龙头", "角阀", "地漏", "厨卫挂件", "接线板", "开关", "锁具", "工具", "劳保", "家用胶", "门铃"],
            ["衣帽架", "层架/置物架", "鞋架", "简易衣柜", "晾衣架", "折叠床", "家用梯", "电脑桌", "休闲椅/凳", "储物收纳", "边桌茶几"],
            ["雨刷", "香水", "洗车配件", "毛巾掸子", "坐垫", "头枕腰靠", "挂件摆件"],
            ["益生菌", "维生素", "螺旋藻", "增肌粉", "燕窝", "阿胶", "虫草", "参类", "三七", "石斛", "骨骼健康", "左旋肉碱", "美容养颜", "美体塑身"],
            ["验孕试纸", "排卵试纸", "杜蕾斯", "杰士邦", "冈本", "超薄", "持久", "倍润", "大象", "赤尾"],
            ["女士内裤", "文胸", "袜子", "丝袜", "睡衣", "保暖内衣", "丝巾", "帽子", "手套"],
            ["篮球鞋", "徒步鞋", "冲锋衣", "羽毛球", "篮球", "山地车", "运动配件", "NB鞋"],
            ["电脑包", "双肩包", "旅行包", "学生书包", "打火机", "礼品文具", "烟具", "美妆礼品", "闹钟", "挂钟"],
            ["猫粮", "狗罐头", "猫罐头", "狗零食", "猫零食", "猫狗日用", "医疗保健", "水族", "绿植", "园艺工具", "种子"]
        ],
        subtitle: ["五金工具", "简易家具", "汽车用品", "营养滋补", "计生用品", "内衣配饰", "运动户外", "礼品箱包", "宠物园艺"]
    }
];

/* 对数据二次处理 */
// fs.readFile('datass.json', (err, data) => {
//     let obj = {};
//     let newdata = JSON.parse(data);
//     console.log(newdata.plist);
//     newdata.plist.forEach((el, i) => {
//         el.pid = String(i + 1).padStart(5, "0");
//         // el['title'] = decodeURIComponent(el.title);
//         // el['comments'] = "" + parseInt(Math.random() * 1000) * 100;
//         // obj[el.category] = 1;
//     });
//     // let arr = [...Object.keys(obj)];
//     fs.writeFile('datass.json', JSON.stringify(newdata), err => {
//         return;
//     })
// })
// axios.get('http://localhost:3000/allTitle')
//     .then(res => {
//         const datas = res.data;
//         let products = [];
//         const start = async () => {
//             for (let i = 0; i < datas.length; i++) {
//                 const el = datas[i];
//                 const res = await getListData(el, products);
//             }
//             let obj = {
//                 plist: products
//             };
//             fs.appendFileSync('datass.json', JSON.stringify(obj), err => {
//                 if (err) return console.log(err);
//             })
//         }
//         start()
//     })
// const getListData = async (el, arr) => {
//     console.log(el);
//     let subtitle = '';

//     data.forEach(e => {
//         e.sublist.forEach((c, i) => {
//             if (c.indexOf(el) != -1) {
//                 subtitle = e.subtitle[i];
//             }
//         })
//     })
//     let key = encodeURIComponent(el);
//     // const url = 'https://search.jd.com/Search?keyword=oppo&enc=utf-8&wq=oppo&pvid=60822cbfafd74bf5880ad1ff79879f5f';
//     // const url = 'https://search.jd.com/Search?keyword=dior&enc=utf-8&wq=dior&pvid=4f42be0ba5e64f87821e40a7881ab24b';
//     // const url = 'https://search.jd.com/Search?keyword=%E9%85%92&enc=utf-8&wq=%E9%85%92&pvid=a7835285492846b9b33893daa66b2370';
//     const url = `https://search.jd.com/Search?keyword=${key}&enc=utf-8&wq=${key}&pvid=ryxp9pui.nhltvu`;
//     // console.log(url);
//     const res = await superagent.get(url);
//     // 使用 cheerio 去解析数据
//     try {
//         let datas = {};
//         let products = {};
//         const $ = cheerio.load(res.text);
//         console.log(res.text);
//         if ($('ul.gl-warp > li').length == 0) return;
//         $('ul.gl-warp > li').each(function (index, item) {
//             let product = {};
//             let price = $(item).find('.p-price i').eq(0).text();
//             let shop = $(item).find('.p-shop a').text();
//             let name = $(item).find('.p-name a em').text();
//             console.log(price, shop, name);
//             product['pid'] = $(this).data('sku');
//             product['imgsrc'] = 'https:' + $(item).find('.p-img img').data('lazy-img');
//             product['price'] = price;
//             product['price_plus'] = $(item).find('.p-price em').eq(1).text();
//             product['name'] = name;
//             product['commit'] = $(item).find('.p-commit strong')[0].innerText;
//             product['shop'] = shop;
//             product['count'] = "" + parseInt(Math.random() * 100);
//             product['title'] = decodeURIComponent(key);
//             product['category'] = subtitle;
//             console.log(product);
//             arr.push(product);
//         })


//     } catch {
//         console.log('失败');
//         return;
//     }
// }
/* 定制数据 */

// const datas = ['oppo', 'oneplus', 'realme', 'oppo智能耳机', 'oppo智能穿戴', 'oppo智能电视', 'oppo原装配件'];

// let products = [];
// const start = async () => {
//     for (let i = 0; i < datas.length; i++) {
//         const el = datas[i];
//         const res = await getListData(el, products);
//     }
//     let obj = {
//         plist: products
//     };
//     fs.appendFileSync('datass.json', JSON.stringify(obj), err => {
//         if (err) return console.log(err);
//     })
// }
// start()


// async function getListData(url, key) {
//     return
// }

// function listHandler(data) {
//     console.log(data);
// }






// const puppeteer = require('puppeteer');
// // const $ = require('jquery');
// (async () => {

//     // 启动Chromium

//     const browser = await puppeteer.launch({
//         ignoreHTTPSErrors: true,
//         headless: false,
//         args: ['--no-sandbox']
//     });

//     // 打开新页面

//     const page = await browser.newPage();

//     // 设置页面分辨率

//     await page.setViewport({
//         width: 1920,
//         height: 1080
//     });

//     let request_url = 'https://chaoshi.jd.com';

//     // 访问

//     await page.goto(request_url, {
//         waitUntil: 'domcontentloaded'
//     }).catch(err => console.log(err));

//     let title = await page.title();

//     console.log(title);

//     // 网页加载最大高度

//     const max_height_px = 20000;

//     // 滚动高度

//     let scrollStep = 1080;

//     let height_limit = false;

//     let mValues = {
//         'scrollEnable': true,
//         'height_limit': height_limit
//     };
//     while (mValues.scrollEnable) {

//         mValues = await page.evaluate((scrollStep, max_height_px, height_limit) => {

//             // 防止网页没有body时，滚动报错

//             if (document.scrollingElement) {

//                 let scrollTop = document.scrollingElement.scrollTop;

//                 document.scrollingElement.scrollTop = scrollTop + scrollStep;

//                 if (null != document.body && document.body.clientHeight > max_height_px) {

//                     height_limit = true;

//                 } else if (document.scrollingElement.scrollTop + scrollStep > max_height_px) {

//                     height_limit = true;

//                 }

//                 let scrollEnableFlag = false;

//                 if (null != document.body) {

//                     scrollEnableFlag = document.body.clientHeight > scrollTop + 1081 && !height_limit;

//                 } else {

//                     scrollEnableFlag = document.scrollingElement.scrollTop + scrollStep > scrollTop + 1081 && !height_limit;

//                 }
//                 return {

//                     'scrollEnable': scrollEnableFlag,

//                     'height_limit': height_limit,

//                     'document_scrolling_Element_scrollTop': document.scrollingElement.scrollTop,
//                     'chaoshi_category': document.getElementsByClassName('chaoshi_category')
//                 };

//             }

//         }, scrollStep, max_height_px, height_limit);

//         await sleep(3000);
//     }
//     const result = await page.evaluate(() => {
//         let datas = {};
//         let products = [];
//         $('.chaoshi_category').each(function (index, item) {
//             let data = {};
//             data['title'] = $(item).find('.chaoshi_mod_head_title').text();
//             data['data'] = {};
//             const bd = $(item).find('.chaoshi_category_bd');
//             data['data']['focus'] = 'http:' + $(bd).find('.chaoshi_category_focus_pic img').attr('src');
//             data['data']['focus_key'] = $(bd).find('.chaoshi_category_focus_key_inner').text();
//             data['data']['products'] = [];
//             $(bd).find('ul.chaoshi_category_ul li').each(function (index, el) {
//                 let product = {};
//                 product['product_pic'] = 'http:' + $(el).find('.goods_pic img').attr('src');
//                 product['product_title'] = $(el).find('p.goods_title').text();
//                 product['product_prices'] = [$(el).find('div.goods_prices p').eq(0).text(), $(el).find('div.goods_prices p').eq(1).text()];
//                 data['data']['products'].push(product);
//             })
//             // console.log(data);
//             products.push(data);
//         })
//         datas['productslist'] = products;
//         return datas
//     })
//     fs.writeFile('./src/data/data2.json', JSON.stringify(result), err => {
//         if (err) return console.log(err);
//     })
//     /* 爬首页楼层商品 */
//     // const result = await page.evaluate(() => {
//     //     let datas = {};
//     //     let products = [];
//     //     $('.chaoshi_category').each(function(index, item) {
//     //         let data = {};
//     //         data['title'] = $(item).find('.chaoshi_mod_head_title').text();
//     //         data['data'] = {};
//     //         const bd = $(item).find('.chaoshi_category_bd');
//     //         data['data']['focus'] = 'http:' + $(bd).find('.chaoshi_category_focus_pic img').attr('src');
//     //         data['data']['focus_key'] = $(bd).find('.chaoshi_category_focus_key_inner').text();
//     //         data['data']['products'] = [];
//     //         $(bd).find('ul.chaoshi_category_ul li').each(function(index, el) {
//     //             let product = {};
//     //             product['product_pic'] = 'http:' + $(el).find('.goods_pic img').attr('src');
//     //             product['product_title'] = $(el).find('p.goods_title').text();
//     //             product['product_prices'] = [$(el).find('div.goods_prices p').eq(0).text(), $(el).find('div.goods_prices p').eq(1).text()];
//     //             data['data']['products'].push(product);
//     //         })
//     //         // console.log(data);
//     //         products.push(data);
//     //     })
//     //     datas['productslist'] = products;
//     //     return datas
//     // })
//     // fs.writeFile('./src/data/data2.json', JSON.stringify(result), err => {
//     //     if (err) return console.log(err);
//     // })
//     console.log(result);
//     try {
//         // mValues['chaoshi_category'].forEach(function(item) {
//         //     console.log($(item).text());
//         //     let data = {};
//         //     data['title'] = item.querySelector('.chaoshi_mod_head_title').innerText;
//         //     // data['data'] = {};
//         //     // const bd = $(item).find('chaoshi_category_bd');
//         //     // data['data']['focus'] = $(bd).find('a img').data('lazy-img');
//         //     // data['data']['focus_key'] = $(bd).find('div.chaoshi_category_focus_key_inner').text();
//         //     // data['data']['products'] = [];
//         //     // $(bd).find('ul.chaoshi_category_ul li').each(function(index, el) {
//         //     //     let product = {};
//         //     //     product['product_pic'] = $(el).find('a img').data('lazy-img');
//         //     //     product['product_title'] = $(el).find('p.goods_title').text();
//         //     //     product['product_title'] = $(el).find('p.goods_title').text();
//         //     //     product['product_prices'] = [$(el).find('div.goods_prices p').eq(0).text(), $(el).find('div.goods_prices p').eq(1).text()];
//         //     //     data['data']['products'].push(product);
//         //     // })
//         //     // // console.log(data);
//         //     // products.push(data);
//         //     products.push($(item).text());
//         // })
//         // datas['productslist'] = products;
//         // console.log(JSON.stringify(datas));
//         // fs.writeFile('./src/data/data2.json', JSON.stringify(mValues.chaoshi_category), err => {
//         //     if (err) return console.log(err);
//         // })
//         await browser.close()

//     } catch (e) {

//         console.log('执行异常');

//     } finally {

//         await browser.close();

//     }

// })();

// //延时函数

// function sleep(delay) {

//     return new Promise((resolve, reject) => {

//         setTimeout(() => {

//             try {

//                 resolve(1)

//             } catch (e) {

//                 reject(0)

//             }

//         }, delay)

//     })

// }


// superagent.get(plurl, (err, data) => {
//     if (err) return console.log('error');
//     // 使用 cheerio 去解析数据
//     let datas = {};
//     let products = [];
//     const $ = cheerio.load(data.text);
//     $('ul.gl-warp > li').each(function (index, item) {
//         let product = {};
//         product['id'] = (index + 1 + '').padStart(5, '0');
//         product['imgsrc'] = 'https:' + $(item).find('.p-img img').data('lazy-img');
//         product['price'] = $(item).find('.p-price i').eq(0).text();
//         product['price_plus'] = $(item).find('.p-price em').eq(1).text();
//         product['name'] = $(item).find('.p-name a em').text();
//         product['commit'] = $(item).find('.p-commit strong')[0].innerText;
//         product['shop'] = $(item).find('.p-shop a').text();
//         // console.log(product);
//         products.push(product);
//     })
//     datas['productslist'] = products;
//     // 写入data.json
//     fs.writeFile('./src/data/data.json', JSON.stringify(datas), err => {
//         if (err) return console.log(err);
//     })

//     // fs.writeFile('./src/data/data.html', data.text, err => {
//     //     if (err) return console.log(err);
//     // })
// })